// // 类
// class Person {
//     constructor(name, age) {
//         this.name = name;
//         this.age = age;
//     }
//     say() {
//         console.log(`My name is ${this.name}, I'm ${this.age}`);
//     }
// }
// let p1 = new Person('kiwi', 18);
// p1.say();

// // 继承
// class Child extends Person {
//     constructor(name, age, game) {
//         super(name, age);
//         this.game = game;
//     }
//     playGame() {
//         console.log(`I love playing ${this.game}`);
//     }
// }
// let c1 = new Child('jack', 10, 'Ping Pang');
// c1.say();
// c1.playGame();

// const EventEmitter = require('events');

// class MyStream extends EventEmitter {
//   write(data) {
//     this.emit('data', data);
//   }
// }

// const stream = new MyStream();

// stream.on('data', (data) => {
//   console.log(`接收的数据："${data}"`);
// });
// stream.write('传递的数据');

// var a = [2,3,4]
// b = a.reduce((pre, cur) => pre + cur);
// console.log(b);
// console.log(a.reduce((pre, cur) => pre * cur))





// 正则
// 1. 横杆转驼峰
/**
 * 注: replace其实就3种用法 replace(a, b)  
 * 用法1,第1个参数是字符串或正则：'2c'.replace(/\d/g, '#'); // #c
 * 用法2，第2个参数用替代符：'2c'.replace(/(\d)(\w)/g, '#$1@$2'); // @2#c
 * 用法3，第2个参数是方法，方法中的第1个参数是匹配的全部字符串，第2 3个分别表示括号内的局部匹配： '2c'.replace(/(\d)(\w)/g, (a1, a2, a3) => { return '@' + a2 + '#' + a3}) // @2#c
 */

function hasCls(curCls, cls) {
    let reg = new RegExp(`^\\b${cls}\\s+|\\s+${cls}\\s+|\\s+${cls}\\b`);
    return reg.test(curCls);
}
console.log('has:', hasCls('item-a b-item  item ', 'item'))